﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;

namespace ftpd_console
{
    class FTP_Accepter
    {
        public static int count = 0;
        public Thread thrd;
        private Socket newSock;
        private TcpListener listener;

        //Конструктор (ip ардес сервера, port сервера)
        public FTP_Accepter(string ip, int port)
        {
            if (count > 0)
            {
                return;
            }
            //Создаем слушателя
            listener = new TcpListener(IPAddress.Parse(ip), port);
            //Запускаем поток
            thrd = new Thread(this.run);
            thrd.Start();
            count++;
            Console.WriteLine("Accepter: Start!");
            FTP_Listener.SetBindIp(ip);
            Console.WriteLine("Bind IP: " + ip);
        }

        void run()
        {
            //Запускаем слушателя
            listener.Start();

            while (true)
            {
                //Проверяем, есть ли ожидающие на подключение
                if (!listener.Pending())
                {
                    Thread.Sleep(500);
                    continue;
                }
                //Захватываем новые подключения
                newSock = listener.AcceptSocket();
                if (newSock.Connected)
                {
                    Console.WriteLine("Accepter: New client connected!");
                    FTP_Listener temp = new FTP_Listener(newSock);
                }
                //listener.Stop();
            }
        }

        //Экстренное завершение потока
        public void Close()
        {
            Console.WriteLine("Accepter: halt");
            listener.Stop();
            thrd.Abort();
        }
    }
}
